【发布时间】:2011-09-18 01:18:34
【问题描述】:
我正在尝试将一个常用的 GUI 元素子集收集到一个子类中,以后可以将其“包含”到真正的 GUI 中,而无需重写给定的功能(不要问为什么,我想学习它)以后使用)。子类应该使用它自己的 *.ui-File 并且应该被放入一个 QWidget 中,它位于真实的 GUI 中。在此之后,最好从真实的 GUI 访问子类的一些方法——比如按钮的状态。
但是我该如何正确地做到这一点呢?
目前,我的子类工作并在 main 中实例化,但无法从真正的 GUI 访问,因为它仅在 main 中声明。
我的子类头文件:
class logger : public QWidget, private Ui::loggerWidget {
Q_OBJECT
public:
logger(QWidget *parent = 0);
virtual ~logger();
// some more stuff...
}
对应的构造函数。我必须使用“parent”而不是“this”来运行 setupUI,但我不确定这是否正确——无论如何,它可以工作......否则,子类中的子元素不会显示在主窗口中真正的 GUI。
logger::logger(QWidget *parent) : QWidget(parent){
setupUi(parent);
//ctor
}
在 main.cpp 中构造了主窗口,它也使用它自己的 *.ui 文件(包含一个小部件“widget_loggerArea”)。这样做,我无法从“loggerTest”中访问“logger”的方法:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
loggerTest window;
logger myLog(window.widget_loggerArea);
window.show();
return app.exec();
}
我不能将“logger”的构造函数放入主窗口“loggerTest”的构造函数中,因为它会立即被销毁并且永远不会进入事件循环。
我确定我缺少一些面向对象编程的概念,或者 qt 处理其内容的方式...如果有人能对此表示感谢,我将不胜感激 ;-)
我太愚蠢了...使用带有 new 和 delete 的指针就可以了...这太愚蠢了,我简直不敢相信!我最近更习惯 VHDL,这削弱了我的 C++ 业力...
【问题讨论】:
标签: c++ user-interface qt qt4