我有一个Windows和Mac程序,可以在多个显示器上切换到全屏模式.在Qt 4中,似乎(我找不到关于如何执行此操作的明确文档),例如"正确"的方法是通过QMainWindow为机器上的N个监视器创建N ,调用QWidget::move()N监视器的顶部-left x,y坐标,然后调用QWidget::setWindowState(Qt::WindowFullScreen).我不知道这是否是正确的事情 - 再次,我无法在Qt中找到任何文档或示例.
在Qt 5.4.1中,这似乎是"破坏"(如果它一直是正确的事情),特别是在Windows 7上.我仍然试图找出问题所在,但看起来似乎QMainWindow是退出全屏模式.
我刚才清楚这一点,这样做的正确方法是什么?我发现这个论坛帖子似乎暗示我应该设置s 所持有的QScreen底层QWindow对象QMainWindow,但这似乎在我的测试中不起作用.这是我写的一个示例程序:
app.h:
#include <vector>
#include <QObject>
class QMainWindow;
class app : public QObject
{
Q_OBJECT
public:
int run(int argc, char** argv);
public slots:
void add_window();
void remove_window();
void windows_go_to_screens();
void windows_go_to_screens_old();
void windows_go_to_primary_screen();
void windows_fullscreen();
void windows_nonfullscreen();
private:
QMainWindow * create_window(const char * id);
void init_menus( QMainWindow * w );
std::vector<QMainWindow *> m_windows;
}; …Run Code Online (Sandbox Code Playgroud) 我要求我的项目Window在一个屏幕上显示两个QML (一个发送者,一个接收者).两者都.qml要求我在里面包含一些Cpp模型,因此我QQmlApplicationEngine用来注册Cpp模型.
我发现使用QWidget::createWindowContainer()我能够Window为一个项目显示多个s.这适用于第一个QML文件.代码片段如下所示:
QQmlApplicationEngine* engine = new QQmlApplicationEngine(Qurl("main.qml"));
QmlContext* context = engine.getContextProperty();
//do some Cpp models registering...
QQuickview *view = new QQuickview(engine,0);
QWidget* container = widget::createWindowContainer(view);
//I realized I dont need to do container->show(); for the main.qml to appear..
//use desktop widget to move the 2nd container to the 2nd screen...
Run Code Online (Sandbox Code Playgroud)
我决定receive.qml用类似的方法为我创建第二个应用程序引擎.我很快意识到,receive.qml即使有了,也永远不会打开container2->show().现在,它显示一个空页面.
我的问题是: