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

запросы на реализацию функций, методов, классов и д.р. возможностей, исправление обнаруженных багов и т.д.

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 :good2:



Вернуться в Запросы

Who is online
Users browsing this forum: No registered users and 0 guests