Page 1 of 1

PQBuilder [0.5.1] - скорректировать начальный код

PostPosted: 23 Mar 2016, 22:48
by rinart73
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();

Re: PQBuilder [0.5.1] - скорректировать начальный код

PostPosted: 26 Mar 2016, 11:54
by WxMaper
Исправлено