Qt ui界面调用问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt ui界面调用问题相关的知识,希望对你有一定的参考价值。

已使用一个界面文件mainwindow.ui作为主界面,mainwindow.cpp控制该ui界面的数据,现在需要再新建个ui文件作为对话框,主界面内数据需要传递参数给该对话框,请问如何是否只是需要新建ui对话框文件,还是说相应的类文件也要建立?再问如何传参数给该对话框,并调用该对话框ui显示?

最直观的方法如楼上说的新建一个对话框ui类,利用Qt Creator的向导功能很容易实现。在主界面中显示该对话框,即在mainwindow.cpp的某个方法中调用对话框的显示方法。传递参数可以修改对话框的构造函数,或者在显示对话框之前调用它的其他函数,将参数传递进对话框。


简单的示例:

对话框类:

class MyDialog: public QDialog

...
public:
...
    void setSomething(const QVariant &something);
    ....

主界面函数

Mainwindow::showDialog()

    MyDialog dialog(this);
    dialog.setSomething(this->some_member);
    dialog.exec();

参考技术A 再兴建一个带ui的C++类吧.
ui文件光靠自己是显示不出来的,最后都还是全部转换成 C++了.

QT调用软键盘问题,要输入的编辑框在对话框Dialog中(UI界面)

问题是在输入编辑框的过程中需要使用到FocusWidget()函数,但是这个函数又是属于QWidget类的,而我用的编辑框是在Dialog下的,我想问的是有没有什么办法可以使得FocusWidget()在QDialog类下使用,C++学的不好,对类的理解还不够,希望有人能帮忙解决下问题,不胜感激!

sendCharacter()函数用来把键盘输入的内容传给编辑框

sengCharacter()函数的定义,其中用到了FocusWidget()函数

Updateposition()函数中也用到了FocusWidget()函数

参考技术A QDialog继承自QWidget,应该可以直接使用此函数的。追问

好像不可以吧,FocusWidget()函数是针对QWidget类定义的,我想实现的是FocusDialog()函数,可惜QDialog类中没有这个函数啊,C++方面的知识不好,搞不清这些,有没有什么办法实现我的这个想法呢

追答

才看懂你的问题= =

FocusWidget获取的是聚焦控件,这个控件和你要获取的Dialog有没有关系?

如果你要获取的是控件所在的Dialog,获取FocusWidget的父类(parent())转成QDialog就好了。
如果没有关系,那就是获取激活窗口,你看看activeWindow()这个函数行不行。

追问

嘿嘿,谢谢了,转成QDialog确实能聚焦到Dialog上了,但是又出现别的问题,键盘的输入在Dialog中的两个lineEdit内都有,这个该怎么区分开来啊,可不可以给点策略,谢啦

追答

键盘的输入在Dialog中的两个lineEdit内都有是什么意思?

是无法确认当前Focus的LineEdit?
既然已知2个LineEdit,那么它俩的指针就知道了,判断是否相等。

本回答被提问者采纳
参考技术B 在Dialog套一层widget当作容器

以上是关于Qt ui界面调用问题的主要内容,如果未能解决你的问题,请参考以下文章

Qt ui 界面如何更加好看,漂亮

QT调用软键盘问题,要输入的编辑框在对话框Dialog中(UI界面)

qt图形界面编程如何调用对象指针?

qt无ui界面双击直接运行

qt界面显示内容相同

qt creator 中 ui文件 怎么用编译界面修改?