中国开发网: 论坛: 程序员情感CBD: 贴子 776931
龙之吻: 系统是winXP。程序a,b。EnumWindowsProc这段代码在程序a中可以正常运行,但是放到程序b中在执行QWidget::find返回0
再说简单一点,就是我想设置google earth 按钮上的text
#include <QApplication>
#include <QtGui>
#include <QDialog>
#include <QPushButton>
#include <QWidget>
#include <windows.h>
#pragma comment (lib,"user32.lib")
class Window : public QDialog
{
Q_OBJECT
public:
Window(QWidget *parent = 0): QDialog(parent)
{
findButton = new QPushButton(tr("Find"),this);
testButton = new QPushButton(tr("Test"),this);
connect(findButton, SIGNAL(clicked()), this, SLOT(find()));
connect(testButton, SIGNAL(clicked()), this, SLOT(test()));


QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addStretch();
mainLayout->addWidget(findButton);
mainLayout->addWidget(testButton);
setLayout(mainLayout);

setWindowTitle(tr("Find Files"));
resize(200, 100);
};

private slots:
void test();
void find();

private:
QPushButton *testButton;
QPushButton *findButton;
};

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
TCHAR *tc = new TCHAR[256];
::GetWindowText(hwnd,tc,256-1);

if(strcmp(tc,"Find Files") == 0)
{
QWidget *widget = QWidget::find(hwnd);
QList <QObject*> widgets=widget->children();
QListIterator <QObject *> i(widgets);
while(i.hasNext())
{
QObject* obj =i.next();
QString str = obj->metaObject()->className();
if(str == "QPushButton")
{
QPushButton* label = qobject_cast<QPushButton*>(obj);
if(label->text() == "Find")
label->setText("abcde");
}
}
}
return TRUE;
}
void Window::find()
{
EnumWindows((WNDENUMPROC)EnumWindowsProc,0);
}
void Window::test()
{

}
#include "main.moc"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Window window;
window.show();
return app.exec();
}


机器人,这首歌学会了没有?

我们的目标是->没有蛀牙!

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录