我刚开始使用Qt,我对整个信号插槽系统感到迷茫。
我了解一般概念,但我不明白什么是设计我的GUI代码的正确方法。 它应该是一个类的层次结构,指向彼此的指针?例如,如果我有一个主窗口,比如W1
,按钮B1
应该打开另一个窗口W2
。
这是相当显而易见的,为什么W1
的类应该持有一个指向B1
,但似乎我需要保持指针W2
的课,为了B1
的clicked()
信号连接的W2
一些定制的插槽,和我不明白为什么......信号时隙机制不是被设计成通用的而不是具体的实例明智的?设计这个例子代码的正确方法是什么?用Qt设计一个图形用户界面的正确方法
2
A
回答
1
连接总是在类的实例之间创建。信号和插槽是通知B类的一个实例在A类实例中存在变化或事件的机制。
下面是类W1的设计,其将显示当按钮B1被点击时的窗口W2。我跳过了W1类的初始化,也获得了按钮B1,因为没有几种方法可以创建窗口的UI。我加了检查连接是否成功,只是为了安全(我的习惯)。
class W1 :public QWidget
{
public:
A(QWidget *parent = 0):QWidget(parent)
{
//init
B1 = getB1();
if(!connect(B1,SIGNAL(clicked()),this,SLOT(show_W2())))
qFatal("%s %i connection failed B1->clicked this->show_W2",__FILE__,__LINE__);
}
public slots:
void show_W2()
{
QWidget *W2 = new Window2(this->parent());
//create window
}
protected:
QPushButton *B1;
}
这是不同的方法来你的例子,其中类W1现在不任何有关类W2:
class W1 :public QWidget
{
public:
A(QWidget *parent = 0):QWidget(parent)
{
//init
B1 = getB1();
if(!connect(B1,SIGNAL(clicked()),this,SIGNAL(B1_clicked())))
qFatal("%s %i connection failed B1->clicked this->B1_clicked",__FILE__,__LINE__);
}
signals:
B1_clicked()
}
void MainWindow::creatW1()
{
W1 *_w1 = new W1;
if(!connect(_w1,SIGNAL(B1_clicked()),this,SLOT(createW2())))
qFatal("%s %i connection failed _w1->B1_clicked this->show_W2",__FILE__,__LINE__);
}
3
设计此示例代码的正确方法是什么?
使用Qt Designer创建一个简单的UI并查看它生成的内容。当我开始使用Qt时,这帮助了我很多。
+0
这正是我所做的一切,但我如何创建2个部件之间的连接/类?信号插槽编辑器无法识别其他类插槽... –
+2
在您的代码中手动连接这些插槽。请参阅QObject :: connect()。 – arrowd
相关问题
- 1. 什么是制作图形用户界面的正确方法
- 2. C++指针图形用户界面QT
- 3. 图形用户界面 - actionListener方法
- 4. C#正确的方式来设计/实现此用户界面?
- 5. iPhone用户界面设计方法 - 正在使用Excel筛选
- 6. 图形用户界面(GUI)的Python包的正确布局
- 7. 图形用户界面设计:禁用标签?
- 8. 漂亮的,设计友好的图形用户界面库
- 9. 正确的用户界面设计与ASP.Net
- 10. 改善图形用户界面/网站的设计
- 11. Android用户界面设计
- 12. iPhone用户界面设计
- 13. Java图形用户界面
- 14. 图形用户界面
- 15. 图形用户界面
- 16. 图形用户界面 - Tkinter
- 17. 图形用户界面无法打开
- 18. Android:如何正确设计用户界面
- 19. 什么是设计的JavaFX 2.0的图形用户界面的最佳方式?
- 20. 图形用户界面重复xib后GUI不正确?
- 21. 图形用户界面没有正确更新
- 22. Java图形用户界面:使坐标正确对齐
- 23. 在线图形用户界面设计工具
- 24. 使用两个用户界面 - Qt 5.5
- 25. 使用Hadoop的图形用户界面
- 26. Matlab图形窗口转换(屏幕转换 - 图形用户界面设计)
- 27. 一个很好的用户界面设计,用于评估.Net
- 28. Qt的C++图形用户界面的桌面应用程序的声子
- 29. 图形用户界面更新和控制同时在qt
- 30. 分层面板图形用户界面
在哪里我可以找到如何正确初始化小部件的类? – Sugar
你的意思是Ui初始化?如果你已经安装了Qt Creator,使用选项“Create form”创建Qt GUI项目,并检查生成的代码。在大多数情况下,这是推荐的初始化方式。 – firescreamer
在大多数情况下,UI初始化是手动的。即使在Qt的例子和教程中。这有点令人惊叹。生成的代码很有帮助。 – Sugar