繁体   English   中英

带有用户界面编译器的Qt动态样式表

[英]Qt dynamic stylesheet with User Interface Compiler

我正在使用Qt应用程序,该应用程序通过Qt用户界面编译器使用XML文件生成用户界面。

我无法访问保存每个小部件的代码(我可以,但是Qt UI编译器每次都会重新生成它),所以我无法向其生成的类中添加其他方法。

我正在尝试在一个QLineEdit窗口小部件上执行setStyleSheet,但它给了我一个QPixmap: It is not safe to use pixmaps outside the GUI thread警告QPixmap: It is not safe to use pixmaps outside the GUI thread ,然后最终出现段错误。 在辞职之后,我决定测试每个小部件有两个副本,每个副本都有所需的样式表值。 然后,我会根据需要在小部件上触发QLineEdit::hide()QLineEdit::show() ,我认为这样可以工作。

没有。 该程序现在吐出QCoreApplication::sendPostedEvents: Cannot send posted events for objects in another thread每次运行时都QCoreApplication::sendPostedEvents: Cannot send posted events for objects in another thread

我该怎么做才能解决此问题? 我需要动态更改小部件的样式表,但似乎无法以任何方式进行更改。

您不能从主线程以外的线程中调用任何QWidget方法。 不过,从任何线程安全地间接调用此类方法相当容易。 有关详细信息,请参见此答案

例如,假设您想从在其他线程中运行的代码中调用小部件上的setStyleSheet

template <typename F>
static void postToMainThread(F && fun, QObject * object) {
   QObject signalSource;
   QObject::connect(&signalSource, &QObject::destroyed, object, std::forward(fun));
}

void threadCode(QWidget * widget) {
  postToMainThread([widget]{
    widget->setStyleSheet("color: black");
  }, widget);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM