您的位置:首页 > 其它

没有合适的构造函数可用??

2011-02-06 18:05 375 查看
最近又在看《C++ GUI Programing with Qt 4》(Second Edition),按照里面的里面的例子做着。我没有按照书里的步骤,先绘制界面,再编写头文件、源文件……而是直接用的Qt Creator新建的工程。结果按照书里说的,在Qt设计师中修改了窗体的objectName后,就老编译不过去了。老是说“Ui::xxxxxxx没有合适的构造函数可用”。我想肯定是修改了objectName,没有对应修改头文件或源文件的一些地方的原因。

想了一下,将工程中的源文件和头文件中包含原来objectName的地方全部改为现在的objectName,问题就解决了。

大家不要笑,本人才接触这个东西,对它的机制还不太了解。

我做的是例子2.4——改变形状的对话框。用Qt Creator编译sortdialog后,在sort-build-desktop目录中会产生一个名为ui_sortdialog.h的文件。这个文件实际上就是Qt界面的C++实现。我们打开这个文件,可以看到在代码的末尾有个:

namespace Ui {

class SortDialog: public Ui_SortDialog {};

} // namespace Ui

这么看,那命名规则就是class objectName:public Ui_objectName{}。也就是说SortDialog类是从Ui_SortDialog继承而来的。在Qt Creator2.0.1(Qt 4.7)生成的工程文件中,sortdialog.h是没有包含ui_sortdialog.h的。那么它是怎么调用Ui的呢?它没有像书中写的那样工作,而是在SortDialog类中写了这么一句“private: Ui::SortDialog *ui",建立了一个Ui类的指针。刚才我们知道Ui::SortDialog是从Ui_Sortdialog类继承而来的,这样通过Ui::SortDialog类的指针也就可以对用户创建的界面中的空间进行操作了。又因为在sortdialog.h中并没有包含ui_sortdialog.h,所以为了使编译器不出错,程序在sortdialog.h中又定义了一个同样的命名空间

namespace Ui {
class SortDialog;
}。然后,在sortdialog.cpp中,程序包含了ui_sortdialog.h。在这个文件中,实现了SortDialog类。

除了这些以外,其余部分应该就和书里面一样了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: