QT - 在另一个窗口中克隆窗口“屏幕”

时间:2014-05-10 05:31:17

标签: qt qwidget

我有两个“QMainWindows”A和B.

A有一个指向B作为类成员的指针(并在构造函数上动态创建B)。程序实现在两个不同的监视器中。显示器'X'上显示'A',显示器'Y'显示'B'。 'A'控制'B'上显示的内容,因为我将它们放在两个不同的显示器中,在'A'中我想看到'B'上发生了什么(实时的'屏幕截图')。有没有办法做到这一点?

我曾想过制作一个“QWidget * clone = B-> ui-> centralWidget;”在'A'的构造函数中,因为在'B'中我拥有'QWidget centralWidget'下的所有信息,但它似乎不起作用。

任何有启发性的想法都会被深深地贬低!

1 个答案:

答案 0 :(得分:0)

您应该可以使用QPixmap::grabWindow和QTimer。 QPixmap::grabWindow会返回一个QPixmap,您只需在其上显示,例如一个QLabel

显示

的类的虚拟头文件
class MainWindow: public QMainWindow, public Ui::MainWindow
{
  Q_OBJECT

  public:
  MainWindow(QWidget *parent = NULL);
  ~MainWindow() {};

public slots:
  void update();

private:
  MainWindow2 *window;
  QTimer *timer;
};

实施

MainWindow::MainWindow(QWidget *parent)
{
  setupUi(this);
  window = new MainWindow2;
  window->show();
  timer = new QTimer(this);
  connect(timer, SIGNAL(timeout()), this, SLOT(update()));
  timer->start(5000);

}

void MainWindow::update()
{
  if( window ) {
      QPixmap pixmap = QPixmap::grabWindow( window->winId() );
      label->setPixmap(pixmap);
  }
}

编辑:在询问窗口ID之前,添加了一个检查以确保窗口不是NULL。

这样,子窗口的屏幕截图将显示在父窗口的QLabel中,并将每5秒更新一次(您可以根据需要进行调整)。这是否涵盖您的用例?