qt自定义的函数怎么调用mainwindow

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt自定义的函数怎么调用mainwindow相关的知识,希望对你有一定的参考价值。

我自定义了一个event()的函数,怎么样让这个函数调用mainwindow.cpp中的主函数?
新手求解!!

参考技术A 头文件:
private:
QLabel *label001;
QPushButton *buttonxxx
cpp文件:
构造函数{
label001 = new QLabel(this);以后在这个类里可以用label001->setText()这样直接用这个控件。
参考技术B // 你这里的mainwindow应该是作为的主窗体函数吧,此时他的构造函数是不能调用的,因为他就是主线程,你要调用它的内部函数是可以的。

追问

那我如果想要调用它就得在内部再定义一个函数代替主窗体函数?如果想调用该怎么调用呢?

追答

你可以这样试试:
1、你吧你MainWindow的构造函数里面所做的事情以一个函数来实现,比如void initMainWindow();这样你既完成了构造,同时也给其他调用函数提供了方便。
2、再者你另外定义一个功能相似的类,这个方法不推荐。
3、不吧mainwindow类作为主窗体函数。

本回答被提问者和网友采纳
参考技术C MainWindow a;
或者 MainWindow *a = new MainWindow;
在调用 a.
或者 a->

QT 自定义处理调试信息

参考技术A

在QT中,我们经常使用 qDebug() 、 qInfo() 等来打印调试的信息,但是当打印信息过多时,很不利于查找阅读。所以本文介绍使用 QtMessageHandler 类中的 qInstallMessageHandler() 来自定义处理调试信息。

一、在主线程中注册调试信息处理回调

这里的 outputMessage 即为自定义的触发函数,当程序有调试信息时,将会调用此函数

二、实现触发函数

说明:此函数需要接受三个参数
QtMsgType type :表示调试信息类型,包括 QtDebugMsg (调试消息)、 QtInfoMsg (信息消息)、 QtWarningMsg (警告消息和可恢复的错误)、 QtCriticalMsg (关键错误和系统错误)、 QtFatalMsg (致命错误)
const QMessageLogContext &context :表示有关日志消息的其他信息,比如文件名 context.file 、行号 context.line 等等。
const QString &msg :表示原始的调试信息。
这样,我们就可以根据调试信息类型,自定义处理调试信息,并打印到日志文件等等。

但是有时候,我们会有这样的需求,有些类型的信息需要打印到屏幕,而有些类型的信息需要打印到日志。当注册了调试信息处理的回调,如何分类去处理呢?
查看QT文档中对于 qInstallMessageHandler() 的描述,可以知道该函数返回一个指向上一个消息处理程序,可以理解为上一个消息处理函数的指针。因此在使用 qInstallMessageHandler() 注册回调时,可以保存函数的返回,从而用之前的处理程序来处理调试信息
例如:

使用 s_messageHandler 来保存函数的返回值,即指向了上一个消息处理函数。在 outputMessage() 函数中使用 s_messageHandler

这样就实现了将Info等信息打印到日志,而debug信息打印到屏幕。
注: 以上写入日志文件的写法,并不是线程安全的,需要加锁来保证线程安全,这里就不再赘述。

正常的运行程序,日志内容如下:

实际项目中遇到了编译出的Release版本,日志输出没有文件信息、行数的问题。如下:

解决方法:
在.pro文件中添加宏

一定要先删除掉之前编译的中间文件,重新qmake!这样就可以在Release版本中正确输出日志信息。

以上是关于qt自定义的函数怎么调用mainwindow的主要内容,如果未能解决你的问题,请参考以下文章

QT 自定义处理调试信息

Qt 使用自定义 QObject 类型调用 qml 函数

Qt MainWindow中自定义函数调用MainWindow中方法

qt 自定义控件怎么使用? 用“Qt4设计师自定义控件”写了个控件,但是不知道怎么使用,急啊!

Qt/VTK:没有合适的默认构造函数可用(自定义交互器)

Qt的自定义类调用show函数不能显示布局,就像图片上显示一样