我在QT主控件mainwindow里我加了一个widget控件,我用QPainter只能在mainwindow里画直线,如何画在widget
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我在QT主控件mainwindow里我加了一个widget控件,我用QPainter只能在mainwindow里画直线,如何画在widget相关的知识,希望对你有一定的参考价值。
我把widget放在groupbox控件里,如何让widget控件填充到groupbox控件?
在主程序中对painter赋widget的指针是不行的,应该需要将QWidget子类化,在子类中重写paintEvent函数。追问能给出一个类似的demo吗?
参考技术A 没太看明白你的问题如果是widget画的话,重写paintEvent就行了追问
mainwindow上的一个widget,我如何在widget上画直线?现在我能够实现的仅仅可以在mainwindow上画图。谢谢
当 MainWindow 从另一个类(不在主函数中)启动时,QT ui 未显示
【中文标题】当 MainWindow 从另一个类(不在主函数中)启动时,QT ui 未显示【英文标题】:QT ui not showing up when MainWindow initated from another class (not in the main function) 【发布时间】:2017-12-31 12:41:32 【问题描述】:是否可以在 QT 中初始化 MainWindow 的对象并从另一个类调用 show 方法,例如在线程类构造函数中,然后在 main 函数中创建线程对象并启动线程?它对我不起作用(用户界面闪烁并立即消失)。有什么办法可以解决吗?如果没有,我怎样才能控制线程中的按钮和其他东西。如何通过交换数据在它们(线程和 ui 类)之间进行通信?
我的程序是这样的。线程构造函数:
#include "mainwindow.h"
void thread::thread()
MainWindow m;
m.show();
及主要功能:
int main(int argc,char *argv[])
QApplication a(argc,argv);
thread t;
t.start();
return a.exec();
【问题讨论】:
尝试将MainWindow m; m.show();
更改为MainWindow *m = new MainWindow; m->show();
【参考方案1】:
您可以这样做,但在此之前您必须将 MainWindow 连接到线程对象。除了修改 GUI 的 GUI 线程函数之外,您不应该从其他线程调用。
解决方案是使用插槽/信号。从线程到 UI 的所有通信始终通过槽和信号完成。
下面是一个例子:
在您的 Thread 类中创建一个名为 mySignal();
的信号
class Thread
...
signals:
void mySignal();
...
并在您的 MainWindow 中创建一个插槽
class MainWindow
...
public slots:
void ShowWindow();
..
在 MainWindow 类中创建一个名为 showWindow() 的函数
void MainWindow::ShowWindow()
this->show();
将你的线程连接到主窗口
connect(threadObject, &Thread::mySignal, this, &MainWindow::ShowWindow);
使用emit mySignal();
从你的线程调用槽
PS:您的应用程序应该是小部件应用程序而不是控制台。
【讨论】:
connect(threadObject, &Thread::mySignal, this, &MainWindow::ShowWindow());
或 connect(threadObject, &Thread::mySignal, this, &MainWindow::ShowWindow);
,是错字吗?
@eyllanesc 你是对的,应该是&MainWindow::ShowWindow
。我已经更正了。
我认为是因为在函数中创建的对象只存在于该函数中,最终被淘汰。您是否测试过您的解决方案?
你的代码:void MainWindow::ShowWindow() MainWindow m; m.show();
,好像没必要,void MainWindow::ShowWindow() show();
@eyllanesc 当我写下答案时,我知道他的对象超出了范围。我什至没有提到它,因为从你的线程在堆上分配主窗口是错误的。正确的方法是使用小部件应用程序并使用从线程到 gui 线程的信号和插槽。以上是关于我在QT主控件mainwindow里我加了一个widget控件,我用QPainter只能在mainwindow里画直线,如何画在widget的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Qt(或 PyQt)中将一个主窗口调用到另一个主窗口