запросы на реализацию функций, методов, классов и д.р. возможностей, исправление обнаруженных багов и т.д.
Moderator: ArtMares
-
rinart73
-
- Posts: 36
- Joined: 19 Mar 2016, 13:47
- Skype: art7emw
Main Window. Что мы имеем сейчас:
- Code:
class MainWindow extends QMainWindow {
private $menuBar;
private $centralWidget;
public function __construct() {
parent::__construct();
$this->initComponents();
$this->initMenus();
}
private function initComponents() {
$this->centralWidget = new QWidget;
}
private function initMenus() {
$this->menuBar = new QMenuBar($this);
/* File menu */
$fileMenu = $this->menuBar->addMenu( tr("File") );
$aboutAction = $fileMenu->addAction( 'icons/about.png', tr("About") );
$aboutAction->connect(SIGNAL('triggered(bool)'), $this, SLOT('onMenuAboutAction(bool)'));
$fileMenu->addSeparator();
$quitAction = $fileMenu->addAction( 'icons/quit.png', tr("Quit") );
$quitAction->connect(SIGNAL('triggered(bool)'), $this, SLOT('onMenuQuitAction(bool)'));
/* Edit menu */
$editMenu = $this->menuBar->addMenu( tr("Edit") );
$otherAction = $editMenu->addAction('Action without icon');
$this->setMenuBar($this->menuBar);
}
public function onMenuAboutAction($sender, $checked) {
QMessageBox::about($this, tr("About"), tr("This is 'About' menu action.\r\nChange code in `onMenuOpenAction` function."));
QMessageBox::aboutQt($this);
}
public function onMenuQuitAction($sender, $checked) {
qApp::quit();
}
}
$mainWindow = new MainWindow;
$mainWindow->show();
qApp::exec();
Исправленный вариант:
- Code:
class MainWindow extends QMainWindow {
//Эти два св-ва уже определены в QMainWindow и используются для установки менюбара и центрального виджета соответственно. Определяя их в дочернем классе мы усложняем себе жизнь. Причем, когда $centralWidget определен здесь, то в коде ниже мы его не устанавливаем в качестве центрального.
//private $menuBar;
//private $centralWidget;
public function __construct() {
parent::__construct();
$this->initComponents();
$this->initMenus();
}
private function initComponents() {
//Без переопределенного св-ва centralWidget, QWidget будет успешно присоединен
$this->centralWidget = new QWidget;
}
private function initMenus() {
//QMenuBar не нужно указывать родителя при создании иначе он будет создан и присоединен как обычный виджет, а не как менюбар
$this->menuBar = new QMenuBar;//$this->menuBar = new QMenuBar($this);
/* File menu */
$fileMenu = $this->menuBar->addMenu( tr("File") );
$aboutAction = $fileMenu->addAction( 'icons/about.png', tr("About") );
$aboutAction->connect(SIGNAL('triggered(bool)'), $this, SLOT('onMenuAboutAction(bool)'));
$fileMenu->addSeparator();
$quitAction = $fileMenu->addAction( 'icons/quit.png', tr("Quit") );
$quitAction->connect(SIGNAL('triggered(bool)'), $this, SLOT('onMenuQuitAction(bool)'));
/* Edit menu */
$editMenu = $this->menuBar->addMenu( tr("Edit") );
$otherAction = $editMenu->addAction('Action without icon');
////Без переопределенного св-ва menuBar, присвоения ему нового экземпляра QMenuBar хватит для нормальной работы
//$this->setMenuBar($this->menuBar);
}
public function onMenuAboutAction($sender, $checked) {
QMessageBox::about($this, tr("About"), tr("This is 'About' menu action.\r\nChange code in `onMenuOpenAction` function."));
QMessageBox::aboutQt($this);
}
public function onMenuQuitAction($sender, $checked) {
qApp::quit();
}
}
$mainWindow = new MainWindow;
$mainWindow->show();
qApp::exec();
Почетный страдалец фигней
Пилю load_ui_file
-
WxMaper
- Администратор
-
- Posts: 92
- Joined: 19 Mar 2016, 08:13
Вернуться в Запросы
Who is online
Users browsing this forum: No registered users and 1 guest